﻿using System;
using System.Collections.Generic;

namespace PaceR.Core.Interfaces.Conditionals
{
    public interface IConditionTestable
    {
        IConditionTestable PreviousTest { get; set; }
        IConditionTestable NextTest { get; set; }
        BooleanOperators ConstraintConditional { get; set; }
        bool RunTest();
    }

    public interface IConditionTest : IConditionTestable
    {
        IConditionTest<T> Test<T>(T testableValue);
    }

    public interface IConditionTest<T> : IConditionTestable
    {
        IConditionConstraint<T> IsDefault();
        IConditionConstraint<T> IsNotDefault();
        IConditionConstraint<T> Equals(T testParam);
        IConditionConstraint<T> DoesNotEqual(T testParam);
        IConditionConstraint<T> IsGreaterThan(T testParam);
        IConditionConstraint<T> IsLessThan(T testParam);
        IConditionConstraint<T> IsWithinRange(T testParam1, T testParam2);
        IConditionConstraint<T> IsOutsideRange(T testParam1, T testParam2);
        IConditionConstraint<T> Matches(T testPattern);
        IConditionConstraint<T> DoesNotMatch(T testPattern);
    }
}
